package Uebung02;
import de.htw.saarland.stl.Stdin;
/**
 * Testklasse einer simplen Bestandsführung
 * 
 * @author1  Andreas Schreiner
 * @author2  Kevin Morsch
 * @version 1.0-u2
 */
public class TestDialog
{
    private Artikel wahl;
    /**
*Simples visuell dargestelltes Auswahlmenü der
*verschiedenen Testmöglichkeiten des Programms
*/

    //Klassenkonstanten
    private static final int ANLEGEN    =   1;
    private static final int AUFBUCHEN  =   2;
    private static final int ABBUCHEN   =   3;
    private static final int SETMETHODE =   4;
    private static final int ENDE       =   0;

    /**
     * Standardkonstruktor der Klasse TestDialog
     */
    public TestDialog(){}

    /** #1
*Exception/Error Auffang-prozess bei Falscheingabe
*der Artikeldaten.
*/
    public void start(){
        wahl = null;
        int function = -1;

        while (function != ENDE) {
            try {
                function = numdefifunction();
                ifunction(function);
            } catch (AssertionError e) {
                System.out.println(e);
            } catch (Exception e) {
                System.out.println(e);
                e.printStackTrace();
            }
        }
    }
/**
*Ausgabe des simplen Auswahlmenüs auf dem Monitor
*/
    private int numdefifunction() {
        System.out.print(
            ANLEGEN     + ": Anlegen" + '\n'+
            AUFBUCHEN   + ": Aufbuchen " +'\n'+
            ABBUCHEN    + ": Abbuchen " +'\n'+
            SETMETHODE  + ": Setmethode " +'\n'+
            ENDE        + ": Beenden"+'\n'+
            "Ihre Eingabe: " );
        return Stdin.readlnInt();
    }

    /**
*Abfrage der gewählten Testmethode des Benutzers
*
*Sofern die Eingabe keine gültige Eingabe ist, 
*wird der Benutzer auf die falsche Eingabe hingewiesen
*und der Error aufgefangen (siehe #1)
*
*Sobald alle möglichen Testmethoden abgefragt wurden,
*beendet sich das Programm mit dem Output
*"Programm beendet."
*
*@param bestand
*@param artikelNR
*@param bezeichnung
*@param menge
*/
    private void ifunction(int function){

        int bestand;
        String bezeichnung;
        int artikelNR;
        int menge;
        if (function == ANLEGEN){
            wahl = artikelAnlegen(); 
        }
        else if (function == AUFBUCHEN) {
            menge = Stdin.readlnInt("\nAufzubuchende Menge: ");
            wahl.bucheZugang(menge);
        }
        else if (function == ABBUCHEN){
            menge = Stdin.readlnInt("\nAbzubuchende Menge: ");
            wahl.bucheAbgang(menge);
        }
        else if (function == SETMETHODE) {
            bezeichnung = Stdin.readlnString("\nNeue Bezeichnung: ");  
            wahl.setBezeichnung(bezeichnung);
        }
        else if (function == ENDE){
            System.out.println("\nProgramm beendet.");
        }
        else{
            System.out.println("\nFalsche function!");
        }

        System.out.println(wahl);
    }

/**
*Eingabe der neuen Artikeldaten zum testen
*der set-Funktion von Artikel
*/
    
    private Artikel artikelAnlegen() {
        int bestand;
        String bezeichnung;
        int artikelNR;
        artikelNR = Stdin.readlnInt("Artikelnummer: ");
        bezeichnung = Stdin.readlnString("Bezeichnung: ");
        bestand = Stdin.readlnInt("Aktueller Bestand: ");
        return new Artikel(artikelNR, bezeichnung, bestand);
    }
public static void main (String[] args) {
        TestDialog d = new TestDialog();
        d.start();
}
}
